package mysql

import (
	"errors"
	"fmt"
	"gitee.com/xuxinzhi2206/corehubs/nacos"
	"gitee.com/xuxinzhi2206/corehubs/types"
	"gopkg.in/yaml.v2"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

// mysql数据库
func WriteDB(head func(db *gorm.DB) error) error {
	//获取nacos信息
	info, err := nacos.GetNaCosInfo()
	res := types.ServerConfig{}
	_ = yaml.Unmarshal([]byte(info), &res)

	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
		res.Mysql.Username, res.Mysql.Password, res.Mysql.Host, res.Mysql.Port, res.Mysql.Database)

	fmt.Println(dsn)
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic(errors.New("数据库链接失败"))
	}
	fmt.Println("数据库链接成功")
	//协成关闭
	defer func() {
		dd, _ := db.DB()
		defer dd.Close()
	}()
	return head(db)
}

// 事务
func WriteTx(head func(tx *gorm.DB) error) error {
	return WriteDB(func(db *gorm.DB) error {
		tx := db.Begin()
		err := head(tx)
		if err != nil {
			fmt.Println("事务回滚")
			tx.Rollback()
			return err
		}
		fmt.Println("提交事务")
		tx.Commit()
		return nil
	})
}
